<?php namespace app\wechat\controller;


use houdunwang\route\Controller;
use houdunwang\wechat\WeChat;
use system\model\Keywords;
use system\model\Module;
use \system\model\Config;

/**
 * 微信通讯验证
 * Class Api
 * @package app\wechat\controller
 */
class Api extends Controller{
	public function __construct ()
	{
		//验证微信通讯,在与微信通讯验证之前，需要注意：在中间件中进行Config::set('wechat')，这一步动作
		WeChat::valid();
	}

	//动作
    public function handler(){

		//1.测试回复消息是否正确
		$instance = WeChat::instance('message');
//		$instance->text('ssss');

		//默认回复
		// 在config 表中 给wechat——system——resonse 值

		$wechat_system_response = Config::find(1)->wechat_system_response;

		// 将其转化为数组格式

		$wechat_system_response = json_decode($wechat_system_response,true);


		//未关注用户扫描二维码事件
		if ($instance->isSubscribeScanEvent())
		{
			//获取消息内容
			$message = $instance->getMessage();
			//向用户回复消息
			$instance->text($wechat_system_response['welcome']);
		}
		//2.根据粉丝发来的消息信息，在关键词表找对应的模块，在模块表中看当前模块是不是系统模块。然后进行实例化处理器
		//2.1 获取粉丝发来的消息内容

		$content = $instance->Content;

		//调用方法  方法作用就是调用关键对应的那条数据
		$this->parseKeywords($content);


		// 获取默认回复的消息内容  default_message
		//如果你默认回复消息，恰好是一个关键词。 那么当你随便输入的时候  回复的是关键词内容

		$this->parseKeywords($wechat_system_response['default_message']);


		$instance->text($wechat_system_response['default_message']);

	}

			//这边就是为了new一个方法 class
		protected function parseKeywords($content)
		{
			//消息管理模块
//			$instance = WeChat::instance('message');
			//  这边进行测试  可以原样发送粉丝发过来的消息
//			$instance->text($content);

			//2.2 在关键词表中根据关键词找模块,pluck是 获取 单一一个字段的值
//			$module = Keywords::where( 'keywords' , $content )->pluck( 'module' );

			//在keyword 中查找到粉丝传输过来队形的 keywords 。
			$module = Keywords::where('keywords',$content)->first();
			if ($module)
			{
				//2.3 模块表中查找2.2中的模块是不是系统模块  module_name 是模块英文标识
				//module_is_system 是否为系统模块1代表是   0代表不是
				$module_is_system = Module::where('module_name',$module['module'])->pluck('module_is_system');

				//测试一下 返回的是 是0 还是1  是否为系统模块
//				$instance = WeChat::instance('message');
				// 这里返回的是 1
//				$instance->text($module_is_system);

				//$class = "module\base\system\Processor"
				//$class = "addons\pic\system\Processor";
				//这边有两个选择 所以在这里判断  当 $module_is_system==1 时候  走module 说明是系统模块 如果不等于1  走addons
				$class = ($module_is_system==1 ? 'module':'addons'). '\\' . $module['module'] . '\system\Processor';

				//打印一下。$class能不能出来
//				$instance =WeChat::instance('message');
//				$instance->text($class); //module\base\system\Processor

				//module_id 对应模块id
				return call_user_func_array([new $class , 'handler'],[$module['module_id']]);
			}
		}

}



















































































